package com.zlk.algorithm.huawei.leetcode.dp;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @program: algorithm
 * @ClassName Code44_generate
 * @description:杨辉三角
 * 给定一个非负整数 numRows，生成「杨辉三角」的前 numRows 行。
 * 在「杨辉三角」中，每个数是它左上方和右上方的数的和。
 *
 *
 *
 * @author: slfang
 * @create: 2025-01-14 15:49
 * @Version 1.0
 **/
public class Code44_generate {

    @Test
    public void test(){
        System.out.println(generate(5));
    }

    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ans = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            List<Integer> row = new ArrayList<>();
            for (int j = 0; j < i + 1; j++) {
                int val = (j == 0 || j == i) ? 1 // 首尾一定为1
                        : (ans.get(i - 1).get(j - 1) + ans.get(i - 1).get(j)); // 由上一行的j-1与j元素相加
                row.add(val);
            }
            ans.add(row);
        }
        return ans;
    }


    public List<List<Integer>> generate1(int numRows) {
        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        list.add(1);
        ans.add(list);
        for (int i = 1; i < numRows; i++) {
            ArrayList cur = new ArrayList<>();
            int left = 0;
            int right = 0;
            for (int j = 0; j <= i; j++) {
                if(j==i){
                    cur.add(left);
                }else{
                    right = list.get(j);
                    cur.add(left+right);
                    left = right;
                }
            }
            ans.add(cur);
            list = cur;
        }
        return ans;
    }
}
